package com.shujia.jichu

import scala.io.{Codec, Source}

/**
 * 隐式转换变量
 */
object Demo26implicit {
  def main(args: Array[String]): Unit = {
    //        Source.fromFile("scala/data/students.txt")(Codec("GBK")).getLines().toList

    //    def fun1(a1: Int)(a2: Int): Int = a1 + a2
    //
    //    val res1: Int=>Int = fun1(100)

    //定义一个隐式转换参数
    def fun1(a1: Int)(implicit a2: Int): Int = a1 + a2

    //定义一个隐式转换变量
    implicit var i1: Int = 1000

    val res1: Int = fun1(100)
    println(res1)

    /**
     * 面试题：
     * scala中的隐式转换知道吗？说一说
     * 答：
     *  知道。
     *  1、scala中的隐式转换，本质上就是将一个类型转换成另一个类型去使用另一个类型中的功能
     *  2、scala中的隐式转换分为3种：隐式转换函数，隐式转换类，隐式转换变量
     *  3、隐式转换函数，在使用隐式转换函数返回值类型的功能的时候，可以自动的将参数的类型转成返回值类型进行使用
     *  4、隐式转换类，可以自动的将构造方法的参数类型转成类的类型，将来可以直接使用构造方法中的类型调用类中的方法
     *  5、隐式转换变量，配合函数定义中的隐式转换参数使用，
     *    将来调用函数的时候，可以不用传入隐式转换参数的值，自动使用对应类型的隐式转换变量
     *    当然，也可以手动传入具体的值给隐式转换参数。
     *
     */

  }
}


